From 5ae7811c5c2b94c43930858d2e2880bc10cbf242 Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Thu, 15 Sep 2016 10:06:56 +0200 Subject: [PATCH] x86/EFI: don't accept 64-bit base relocations on page tables Page tables get pre-populated with physical addresses which, due to living inside the Xen image, will never exceed 32 bits in width. That in turn results in the tool generating the relocations to produce 32-bit relocations for them instead of the 64-bit ones needed for relocating virtual addresses. Hence instead of special casing page tables in the processing of 64-bit relocations, let's be more rigid and refuse them (as being indicative of something else having gone wrong in the build process). Signed-off-by: Jan Beulich --- xen/arch/x86/efi/efi-boot.h | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/xen/arch/x86/efi/efi-boot.h b/xen/arch/x86/efi/efi-boot.h index 1098572176..388c4ea332 100644 --- a/xen/arch/x86/efi/efi-boot.h +++ b/xen/arch/x86/efi/efi-boot.h @@ -81,12 +81,9 @@ static void __init efi_arch_relocate_image(unsigned long delta) } break; case PE_BASE_RELOC_DIR64: - if ( delta ) - { - *(u64 *)addr += delta; - if ( in_page_tables(addr) ) - *(intpte_t *)addr += xen_phys_start; - } + if ( in_page_tables(addr) ) + blexit(L"Unexpected relocation type"); + *(u64 *)addr += delta; break; default: blexit(L"Unsupported relocation type"); -- 2.30.2